#ifndef GAME_H
#define GAME_H

#include "stdafx.h"

class MainWindow;
class CGame : public QObject
{
    Q_OBJECT

public:
    MainWindow* m_wnd;
    Plant plants[300];//植物
    int plt_cnt;//植物数目
    Zombie zombies[1000],zmb_tmp[1000];//僵尸
    int zmb_cnt;//僵尸数目
    Bullet bullets[5000],bul_tmp[5000];//子弹
    int bul_cnt;//子弹数目
    int m_yg,m_cc;//阳光
    int scene;//场景
    int m_keng[MMM][MMN];//是否为坑
    bool over;//是否结束
    bool started;//是否开始
    bool car[MMN],car_driv[MMN];//有无车，是否正在用车
    bool freeze_all;//是否全体冰冻
    int fir_plt[MMM*MSI+100][MMN];//向左第一个植物
    int pd[MMN][5000],pj[MMN][5000];//排序用
    int row_zmb[MMN];//每行僵尸数目
    int XS,plt_num[MMM*MSI+100][MMN];
    int t_ai,lst[MMN];//AI用
    bool SZZ,zk,endless,iswa[MMN];//是否正在双指针，AI种葵，是否无尽，是否为水池
    int wat_row[MMN],wat_cnt;//水池行，水池行数
    int m_ng[MMM][MMN],m_dc[MMM][MMN],m_ice[MMM][MMN];//南瓜，地刺，冰道
    int lalj[MMN],lazd[MMM][MMN],lagz[MMM][MMN];//上一个辣椒，上一个炸弹
    set<pair<pair<int,int>,int>> lawg;//上一个窝瓜
public:
    CGame();
    virtual ~CGame();
    void ClearCd();
    void CreateGame(int lx);
    void KillAll();
    bool KillJsLine(int y,int kill);
    bool KillJs(int l,int r,int y,int kill);
    bool KillJs(int x, int y, int kill);
    bool KillJsLie(int x, int kill);
    bool NotZw(int shu);
    void CalZw();
    void DrawZw(QPainter &memdc);
    void DrawJs(QPainter &memdc);
    void DrawZd(QPainter &memdc);
    void DrawMw(QPainter &memdc);
    void Draw(QPainter &memdc);
    bool JsCai(int shu);
    void ZhangNan(int shu);
    bool MoveJs(int shu);
    void MoveAllZd();
    int GetFirstZw(int x,int y);
    int GetFirstJs(int x,int y);
    int GetLastJs(int x,int y);
    int GetZwShu(int x,int y)const;
    bool Eat(int zshu,int jshu,bool snd);
    void DestroyZw(int x,int y);
    int DestroyZw(int shu);
    void DestroyJs(int shu);
    void DestroyZd(int shu);
    bool Goj(int zshu);
    bool NewZw(Plant zw);
    void NewJs(Zombie js);
    void NewZd(Bullet zd);
    void Crepeer(int i);
    void AI();
    int Valid(int x,int sy);
    int Find(int*,int);
    int FakeKill(int,int,int,int);
    int FakeKillL(int y,int kill);
    bool UnderGaint(int x,int y);
    bool UnderCar(int x,int y);
    bool BeforeShe(int x,int y);
    int Find(int zz[20],int n,int hg);
    bool NearGaint(int x,int y);
    bool NearCar(int x,int y);
    bool UnderMonth(int x,int y);
    void input(QDataStream &);
    void output(QDataStream &);
    bool meihuo(int i);
    bool ShiFei(Plant &zw);
    QSize MSize(int x,int y);
    QPoint MPoint(int x,int y);
};

#endif // GAME_H
